
一、time_t别名:

    time_t 用来表示时间数据类型，它是一个long（长整数）类型的别名，在time.h文件中定义，表示一个日历时间，是从1970年1月1日0时0分0秒到现在的秒数




二、time库函数

    time函数返回1970年1月1日0时0分0秒到现在的秒数。

    函数声明:  time_t time(time_t, *t);
    示例:
        time_t tnow;
        tnow = time(0);     //0也可以用NULL

time_t是一个long类型，返回的是秒数，不符合使用习惯，需要转成结构体类型，tm是time.h中声明的



三、tm结构体
结构体:
    struct tm
    {
        int tm_sec;     // 秒：取值区间为[0,59] 
        int tm_min;     // 分：取值区间为[0,59] 
        int tm_hour;    // 时：取值区间为[0,23] 
        int tm_mday;    // 日期：一个月中的日期：取值区间为[1,31]
        int tm_mon;     // 月份：（从一月开始，0代表一月），取值区间为[0,11]
        int tm_year;    // 年份：其值等于实际年份减去1900
        int tm_wday;    // 星期：取值区间为[0,6]，其中0代表星期天，1代表星期一，以此类推 
        int tm_yday;    // 从每年的1月1日开始的天数：取值区间为[0,365]，其中0代表1月1日，1代表1月2日，以此类推 
        int tm_isdst;   // 夏令时标识符，该字段意义不大，我们不用夏令时。
    };





四、localtime库函数

localtime就是把time_t表示的秒数转换为这个结构体，函数返回struct tm结构体的地址。

函数声明:
    struct tm * localtime(const time_t *);

示例:
    #include<iostream>
    #include<time.h>

    using namespace std;

    int main()
    {
        time_t t = time(NULL);
        struct tm* tm  = localtime(&t);
        cout << tm->tm_year+1900 << endl;       //2024

        return 0;
    }





五、mktime库函数

mktime函数的功能与localtime函数相反，是把tm结构体转换成time_t表示时间

函数声明:
    time_t mktime(struct tm *tm);






六、strftime库函数

格式化结构 timeptr 表示的时间，并把它存储在 str 中。

函数声明:
    size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)

        str -- 这是指向目标数组的指针，用来复制产生的 C 字符串。
        maxsize -- 这是被复制到 str 的最大字符数。
        format -- 这是 C 字符串，包含了普通字符和特殊格式说明符的任何组合。这些格式说明符由函数替换为表示 tm 中所指定时间的相对应值。格式说明符是

        返回值:如果产生的 C 字符串小于 size 个字符（包括空结束字符），则会返回复制到 str 中的字符总数（不包括空结束字符），否则返回零。


示例:
    #include <stdio.h>
    #include <time.h>
    
    int main ()
    {
        time_t rawtime;
        struct tm *info;
        char buffer[80];
        
        time( &rawtime );
        
        info = localtime( &rawtime );
        
        strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", info);
        printf("格式化的日期 & 时间 : |%s|\n", buffer );
    
    return(0);
    }

    //格式化的日期 & 时间 : |2018-09-19 08:59:07|
